服务器环境:阿里云 ECS,Windows Server 2019(Build 17763,版本 1809)
一、问题背景
计划在 Windows Server 2019 上启用 SSH 远程管理功能,尝试通过系统自带的 OpenSSH 可选功能进行安装。
二、OpenSSH 自带方案排查过程
1. 安装 OpenSSH 服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装结果显示成功(RestartNeeded : False),但启动服务时报错。
2. 启动服务报错
Start-Service sshd
报错:无法启动计算机上的服务 "sshd"。
3. 排查步骤与结论
| 排查项 | 命令 | 结果 |
|---|---|---|
| 服务是否存在 | Get-Service sshd / Get-Service ssh-agent |
服务存在,状态均为 Stopped |
| 手动前台运行 sshd | sshd.exe -d |
无任何输出 |
| 检查退出码 | $LASTEXITCODE |
返回 -1073741511,即 0xC0000139(STATUS_ENTRYPOINT_NOT_FOUND) |
| 系统版本 | [System.Environment]::OSVersion.Version |
Build 17763(Server 2019 RTM,1809) |
| 补丁安装情况 | Get-HotFix |
补丁齐全,更新到 2026 年 6 月,排除补丁缺失问题 |
| 应用程序/系统日志 | Get-WinEvent |
无相关报错记录 |
| OpenSSH 目录文件版本 | dir C:\Windows\System32\OpenSSH |
发现根本原因:sshd.exe、sftp-server.exe、ssh-shellhost.exe 仍是 2018/9/5 的 RTM 原始版本,而 ssh.exe、ssh-keygen.exe、scp.exe 等其余组件已更新至 2025/12/11 新版本 |
4. 根本原因
系统更新时,sshd.exe 等少数几个文件未被替换为新版本,导致新旧版本组件混用,新版本的依赖库中已移除或变更了旧版 sshd.exe 所调用的函数入口,引发 STATUS_ENTRYPOINT_NOT_FOUND 错误,服务无法启动。
5. 修复方案(未验证是否最终解决,供后续参考)
# 1. 卸载 OpenSSH.Server
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 2. 重启服务器(必须)
Restart-Computer
# 3. 重启后重新安装
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 4. 检查文件版本是否统一
dir C:\Windows\System32\OpenSSH
# 5. 启动服务
Start-Service sshd
Get-Service sshd
若重装后 sshd.exe 日期依然未更新,需考虑系统组件存储(WinSxS)本身受损,进一步执行:
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
6. 阿里云 ECS 操作风险提示
- 重启服务器风险很低,建议在业务低峰期操作,预计中断 2-5 分钟
- 卸载/重装 OpenSSH 不影响 RDP 远程桌面连接方式,不会导致无法登录服务器
- 建议操作前在阿里云控制台为系统盘创建快照,便于出问题时快速回滚
三、改用第三方 SSH 软件:Bitvise SSH Server
由于自带 OpenSSH 版本混乱、修复步骤繁琐,改为安装第三方 SSH 软件 Bitvise SSH Server,不依赖系统自带组件,可独立安装使用。
1. 官方下载地址
https://bitvise.com/ssh-server-download
务必从官网下载,安装包带数字签名,避免使用第三方软件站或网盘资源。
2. 版本说明与授权
- Personal Edition(个人版):免费,但仅限个人非商业用途,不允许在任何类型的组织中使用
- Standard Edition(标准版):30 天全功能免费评估,企业长期使用需付费授权(约 $99.95/许可证)
- 企业内部服务器如需长期使用,建议购买正式授权;短期测试可先用评估版
3. 安装步骤
- 下载
BvSshServer-Inst.exe后,右键 → 属性 → 常规选项卡,若有"解除锁定(Unblock)"选项,勾选后确定 - 双击运行安装程序,按向导操作,默认勾选安装 SSH Server 组件
- 安装过程中选择版本:Personal Edition 或 Standard Edition(企业用途选 Standard Edition)
- 其余选项保持默认,完成安装
4. 配置步骤
- 打开 Bitvise SSH Server Control Panel
- Server 设置:确认/修改监听端口(默认 22,建议改为非默认端口以降低被扫描概率)
- Access Control → Users:添加账户
- Virtual account(虚拟账户):推荐,单独设置用户名密码,不依赖 Windows 系统账户
- Windows account:直接关联系统账户(如 Administrator),需在设置中勾选允许登录
- 点击 Save changes 保存配置
5. 阿里云安全组配置
进入阿里云 ECS 控制台 → 目标实例 → 安全组 → 配置规则,新增入方向规则:
- 协议:TCP
- 端口:与 Bitvise 中配置的监听端口一致(默认 22,或自定义端口)
- 授权对象:建议限制为已知的公网 IP,而非全部放开
6. 连接测试
ssh 账户名@服务器公网IP -p 端口号
四、安全告警记录与处理建议
1. 告警内容(示例)
[时间戳]
Authentication attempt from [来源IP]:[端口] ([地区])
with user name 'administrator' failed.
The user name is not a virtual account and settings do not allow any Windows account to log in.
2. 含义解读
有外部 IP 尝试使用用户名 administrator 登录,因当前 Bitvise 配置未开放任何 Windows 系统账户登录权限,登录被正常拒绝。此记录属于安全机制正常拦截,不代表故障或已被攻破。
3. 风险判断
- 使用常见用户名(administrator)尝试登录,具有典型的自动化扫描/暴力破解特征
- 只要 SSH 端口暴露在公网,此类扫描是普遍现象,需持续做好安全加固
4. 安全加固建议
| 措施 | 说明 |
|---|---|
| 关闭密码登录,仅允许密钥登录 | Bitvise 账户认证方式改为 Public key,是最有效的防护手段 |
| 修改默认端口 | 由 22 改为非常见端口(如 2222、22022 等),减少被扫描概率 |
| 阿里云安全组限制来源 IP | 入方向规则仅放行已知的公网 IP 段,而非全部开放 |
| 禁用常见用户名直接登录 | 不使用 administrator/root 等易猜测用户名,改用自定义账户名 |